//存放行计算的MAP
var hangjisuanMap = new Map();
//存放列计算的MAP
var liejisuanMap = new Map();
//点击行计算添加按钮，将用户输入的公式转换成后台解析的方式
function addRowFormulaRight(){
	var gongshi = $("#aRowCountFormula").text();
	$.ajax({
		url:ctx + '/reportTemplateCountController/countFormulaRowChange/' + gongshi,
		type:'POST',
		cache:false,
		success:function(data){
			if(data[0] == ""){
				alert("填写公式有误，请重新填写");
				return false;
			}else{
				var arrayStr = new Array();
				arrayStr = data[0].split("=");
				var str = arrayStr[1].replace(/行/gm,"");
				var countEnd = eval(str);
				if(isNaN(countEnd)){
					alert("填写公式有误，请重新填写");
					return false;
				}else{
					var hangjisuanMapKey = randomString(true, 1, 32);
					var tableTr = handleDataHangJisuan(hangjisuanMapKey,data);
					$("#hangjisuanTable").append(tableTr);
					var hangjisuanShiti = new HangjisuanShiti(data[0],"1");
					hangjisuanMap.put(hangjisuanMapKey,hangjisuanShiti);
				}
			}
		}
	});
}

function addColFormulaRight(){
	var gongshi = $("#aColCountFormula").text();
	$.ajax({
		url:ctx + '/reportTemplateCountController/countFormulaColChange/' + gongshi,
		type:'POST',
		cache:false,
		success:function(data){
			if(data[0] == ""){
				alert("填写公式有误，请重新填写");
				return false;
			}else{
				var arrayStr = new Array();
				arrayStr = data[0].split("=");
				var str = arrayStr[1].replace(/列/gm,"");
				var countEnd = eval(str);
				if(isNaN(countEnd)){
					alert("填写公式有误，请重新填写");
					return false;
				}else{
					var liejisuanMapKey = randomString(true, 1, 32);
					var tableTr = handleDataLieJisuan(liejisuanMapKey,data[1]);
					$("#liejisuanTable").append(tableTr);
					var liejisuanShiti = new LiejisuanShiti(data[0],data[1],"2");
					liejisuanMap.put(liejisuanMapKey,liejisuanShiti);
				}
			}
		}
	});
}

//行计算的实体
function HangjisuanShiti(gongshi,jisuantype,orderId){
	this.gongshi=gongshi;
	this.jisuantype=jisuantype;
	this.orderId=orderId;
}
//列计算实体(展示公式，数据库后台存的公式，公式类型)
function LiejisuanShiti(gongshiReal,gongshiShow,jisuantype,orderId){
	this.gongshiReal=gongshiReal;
	this.gongshiShow=gongshiShow;
	this.jisuantype=jisuantype;
	this.orderId=orderId;
}

//填写行计算的Table
function handleDataHangJisuan(hangjisuanMapKey,gongshi){
	var tr = '<tr id="' + hangjisuanMapKey + 'Tr">';
    tr += '<td align="center" valign="middle" class="td_grey2">' + gongshi + '</td>';  
    tr += '<td align="center" valign="middle" class="td_grey2" id="' + hangjisuanMapKey + '"><a href="#" onclick="deleteHangjisuanTableTr(this)">删除</a>';
    tr += '||';
    tr += '<a href="#" onclick="tableTrUp(this)">上移</a>';
    tr += '||';
    tr += '<a href="#" onclick="tableTrDown(this)">下移</a></td>';
    tr += '<td style="display:none">' + hangjisuanMapKey + '</td>';
    tr += '</tr>';
    return tr;  
}

//删除一行
function deleteHangjisuanTableTr(obj){
	var id=$(obj).parent().attr('id');
	//删除表格里面的TR
	$('#'+id).parent().remove();
	//删除MAP里面的行计算
	hangjisuanMap.remove(id);
}

function jspShowTabCount(liId){
	$("#pop-up_tag_a_count").attr("class","pop-up_tag_hov");
	$("#pop-up_tag_b_count").attr("class","pop-up_tag_hov");
	$("#"+liId).attr("class","pop-up_tag_a");
	
	$("#pop-up_tag_a_count_div").hide();
	$("#pop-up_tag_b_count_div").hide();
	$("#"+liId+"_div").show();
}

//填写列计算的Table
function handleDataLieJisuan(liejisuanMapKey,gongshi){
	var tr = '<tr id="' + liejisuanMapKey + 'Tr">';
    tr += '<td align="center" valign="middle" class="td_grey2">' + gongshi + '</td>';  
    tr += '<td align="center" valign="middle" class="td_grey2" id="' + liejisuanMapKey + '"><a href="#" onclick="deleteLiejisuanTableTr(this)">删除</a>';
    tr += '||';
    tr += '<a href="#" onclick="tableTrUp(this)">上移</a>';
    tr += '||';
    tr += '<a href="#" onclick="tableTrDown(this)">下移</a></td>';
    tr += '<td style="display:none">' + liejisuanMapKey + '</td>';
    tr += '</tr>';
    return tr;  
}

function deleteLiejisuanTableTr(obj){
	var id=$(obj).parent().attr('id');
	//删除表格里面的TR
	$('#'+id).parent().remove();
	//删除MAP里面的列计算
	liejisuanMap.remove(id);
}


//保存计算公式
function saveCountFormula(){
	$("#but_save_count").attr('disabled','true');
	//获取行计算的表格行数
	var hangJisuanLength=$("#hangjisuanTable tr").length;
	//因为第一行是表头，所以从第二行开始
	for(var a = 1; a < hangJisuanLength; a++){
		var hangjisuanMapKey = $("#hangjisuanTable tr:eq("+ a +")").attr('id');
		//去掉TR id中的TR
		var hangjisuanMapKeyNew = hangjisuanMapKey.replace("Tr","");
		var hangjisuanShiti = hangjisuanMap.get(hangjisuanMapKeyNew);
		hangjisuanShiti.orderId = a;
	}
	
	//获取列计算的表格行数
	var lieJisuanLength=$("#liejisuanTable tr").length;
	//因为第一行是表头，所以从第二行开始
	for(var a = 1; a < lieJisuanLength; a++){
		var liejisuanMapKey = $("#liejisuanTable tr:eq("+ a +")").attr('id');
		var liejisuanMapKeyNew = liejisuanMapKey.replace("Tr","");
		var liejisuanShiti = liejisuanMap.get(liejisuanMapKeyNew);
		liejisuanShiti.orderId = a;
	}
	
	var templateId = $("#templateId").val();
	var hangCountFormula=JSON.stringify(hangjisuanMap);
	var lieCountFormula=JSON.stringify(liejisuanMap);
	$.ajax({
	   type: "POST",
	   url: ctx+"/reportTemplateCountController/saveCountFormula/"+templateId,
	   data: {hangCountFormula:hangCountFormula,lieCountFormula:lieCountFormula},
	   success: function(){
		   alert("保存成功");
		   $('#but_save_count').removeAttr("disabled"); 
	   }
	}); 
}

//当点击行列计算的时候，根据报表的ID获得该报表的所有计算公式
function loadCountFormula(){
	var templateId = $("#templateId").val();
	$.ajax({
		url:ctx+'/reportTemplateCountController/loadCountFormula/'+templateId,
		type:'POST',
		cache:false,
		success:function(data){
			$("#hangjisuanTable tr:gt(0)").remove();
			$("#liejisuanTable tr:gt(0)").remove();
		    $.each(data,function(idx,item){
		    	//判断当前是行计算还是列计算，如果行计算加入到行TABLE下，如果是列计算加入到列TABLE下
		    	if(item.calcType == '1'){
		    		var tableTr = handleDataHangJisuan(item.calcId,item.calcFormula);
					$("#hangjisuanTable").append(tableTr);
					var hangjisuanShiti = new HangjisuanShiti(item.calcFormula,item.calcType);
					hangjisuanMap.put(item.calcId,hangjisuanShiti);
		    	}else if(item.calcType == '2'){
		    		var tableTr = handleDataLieJisuan(item.calcId,item.calcFormulaShow);
					$("#liejisuanTable").append(tableTr);
					var liejisuanShiti = new LiejisuanShiti(item.calcFormula,item.calcFormulaShow,item.calcType);
					liejisuanMap.put(item.calcId,liejisuanShiti);
		    	}else{}
			});
		}
	});
}